package Controller.BDD;

import java.util.ArrayList;


import Model.Droit;
import Model.Groupe;
import Model.Utilisateur;

public class GestionGroupeBDD {

	public GestionGroupeBDD(){
		
	}
	
	
	public static ArrayList<Groupe> recupererListeGroupe(){
		GestionRequeteGroupe gestRequete = new GestionRequeteGroupe();
		ArrayList<Groupe> listeGroupes = new ArrayList<Groupe>();
		ArrayList<Droit> listeDroits = new ArrayList<Droit>();
		ArrayList<Utilisateur> listeUtilisateurs = new ArrayList<Utilisateur>();
		listeGroupes = gestRequete.recupererListeDonneesGroupes("SELECT * FROM GROUPE;");
		if(listeGroupes != null){
			for (Groupe groupe : listeGroupes) {
				int id = groupe.getID();
				listeDroits = gestRequete.recupererListeDroitGroupe("SELECT id_droit from \"groupePossede\" where id_groupe="+id+";");
				listeUtilisateurs = gestRequete.recupererListeUtilisateurGroupe("Select id_user from \"appartenanceGroupe\" where id_groupe="+id+";");
				groupe.setDroits(listeDroits);
				groupe.setUsers(listeUtilisateurs);
				//System.out.println(groupe.toString());
			}
		}
		return listeGroupes;
	}
	
	public static ArrayList<Groupe> recupererListeGroupeByName(String name){
		GestionRequeteGroupe gestRequete = new GestionRequeteGroupe();
		ArrayList<Groupe> listeGroupes = new ArrayList<Groupe>();
		ArrayList<Droit> listeDroits = new ArrayList<Droit>();
		ArrayList<Utilisateur> listeUtilisateurs = new ArrayList<Utilisateur>();
		listeGroupes = gestRequete.recupererListeDonneesGroupes("SELECT * FROM GROUPE WHERE lower(libelle) LIKE '%" + name + "%';");
		if(listeGroupes != null){
			for (Groupe groupe : listeGroupes) {
				int id = groupe.getID();
				listeDroits = gestRequete.recupererListeDroitGroupe("SELECT id_droit from \"groupePossede\" where id_groupe="+id+";");
				listeUtilisateurs = gestRequete.recupererListeUtilisateurGroupe("Select id_user from \"appartenanceGroupe\" where id_groupe="+id+";");
				groupe.setDroits(listeDroits);
				groupe.setUsers(listeUtilisateurs);
				//System.out.println(groupe.toString());
			}
		}
		return listeGroupes;
	}
	
	public static Groupe recupererGroupeParID(int id){
		GestionRequeteGroupe gestRequete = new GestionRequeteGroupe();
		ArrayList<Droit> listeDroits = new ArrayList<Droit>();
		ArrayList<Utilisateur> listeUtilisateurs = new ArrayList<Utilisateur>();
		
		Groupe groupe = gestRequete.recupererGroupeParID("SELECT * from groupe where id="+id+";");
		listeDroits = gestRequete.recupererListeDroitGroupe("SELECT id_droit from \"groupePossede\" where id_groupe="+id+";");
		listeUtilisateurs = gestRequete.recupererListeUtilisateurGroupe("Select id_user from \"appartenanceGroupe\" where id_groupe="+id+";");
		
		groupe.setDroits(listeDroits);
		groupe.setUsers(listeUtilisateurs);
		
		return groupe;
	}
	
	public static void insererGroupe(Groupe groupe){
		GestionRequeteGroupe gestRequete = new GestionRequeteGroupe();
		gestRequete.executeStatement("INSERT INTO groupe(libelle,description) values('"+groupe.getNom()+"','"+groupe.getDescription()+"');");
		for (Droit droit : groupe.getDroits()) {
			gestRequete.executeStatement("INSERT INTO groupePossede(id_groupe,id_droit) values("+groupe.getID()+","+droit.getID()+");");
		}
		for (Utilisateur user : groupe.getUsers()) {
			gestRequete.executeStatement("INSERT INTO appartenanceGroupe(id_user,id_groupe) values("+user.getID()+","+groupe.getID()+");");
		}
	}

	public void supprimerUserParID(Groupe groupe){
		GestionRequeteGroupe gestRequete = new GestionRequeteGroupe();
		gestRequete.executeStatement("DELETE FROM groupe WHERE id = "+groupe.getID()+";");
		gestRequete.executeStatement("DELETE FROM groupePossede WHERE id_groupe = "+groupe.getID()+";");
		gestRequete.executeStatement("DELETE FROM appartenanceGroupe WHERE id_groupe = "+groupe.getID()+";");
	}
	
	public static void supprimerGroupeParID(int idGroupe){
		GestionRequeteGroupe gestRequete = new GestionRequeteGroupe();
	
		gestRequete.executeStatement("DELETE FROM \"groupePossede\" WHERE id_groupe = "+idGroupe+";");
		gestRequete.executeStatement("DELETE FROM \"appartenanceGroupe\" WHERE id_groupe = "+idGroupe+";");
		gestRequete.executeStatement("DELETE FROM groupe WHERE id = "+idGroupe+";");
	}

	
	public static void modifierGroupe(Groupe groupe){
		GestionRequeteGroupe gestRequete = new GestionRequeteGroupe();
		gestRequete.executeStatement("UPDATE groupe set libelle='"+groupe.getNom()+"' where id="+groupe.getID()+";");
		gestRequete.executeStatement("UPDATE groupe set description='"+groupe.getDescription()+"' where id="+groupe.getID()+";");
		
		
		if(groupe.getDroits() !=null){
			gestRequete.executeStatement("Delete from \"groupePossede\" where id_groupe="+groupe.getID()+";");
			for (Droit droit : groupe.getDroits()){
				gestRequete.executeStatement("insert into \"groupePossede\"(id_groupe,id_droit) values ("+groupe.getID()+","+droit.getID()+");");
			}
		}
		
		
		if(groupe.getUsers() != null){
			/*System.out.println("AVANT");
			for (Utilisateur user : GestionGroupeBDD.recupererGroupeParID(groupe.getID()).getUsers()){
				System.out.println("Nom : "+user.getNom()+", id : "+user.getId());
			}*/
			gestRequete.executeStatement("Delete from \"appartenanceGroupe\" where id_groupe="+groupe.getID()+";");
			/*System.out.println("APRES SUPRESSION");
			for (Utilisateur user : GestionGroupeBDD.recupererGroupeParID(groupe.getID()).getUsers()){
				System.out.println("Nom : "+user.getNom()+", id : "+user.getId());
			}*/
			for (Utilisateur user : groupe.getUsers()){
				gestRequete.executeStatement("insert into \"appartenanceGroupe\"(id_user,id_groupe) values ("+user.getID()+","+groupe.getID()+");");	
			}
			/*
			System.out.println("APRES AJOUT");
			for (Utilisateur user : GestionGroupeBDD.recupererGroupeParID(groupe.getID()).getUsers()){
				System.out.println("Nom : "+user.getNom()+", id : "+user.getId());
			}
			*/
		}

		}
	
}
